/**
 * @description: 对 表单验证、工具类、ajax请求、公用业务 封装，统一管理常用全局变量
 * @author: Jone
 * @update: 2019-05-08
 **/

(function(window, document, $) {
    window.jn = {
        // -----------------全局变量----------------
        info: {
            plat: undefined,        // 平台
            token: undefined,
            app: undefined,
            activity: undefined,
            version: undefined,
            cyscid: undefined,
            isInit: 0,   // 0 未初始化 ； 1 初始完成 ； 2 初始失败
            landing: undefined,      // 存放 init 后接口返回所有信息
            userInfo: undefined
        },
        // -----------------全局设置----------------
        common: {
            // 常用表单长度限制，class名要对应
            input: function() {
                $('.input_phone').keyup(function() { if($(this).val().length > 11) $(this).val($(this).val().slice(0, 11)) });        // 手机号
                $('.input_phone_code').keyup(function() { if($(this).val().length > 6) $(this).val($(this).val().slice(0, 6)) });     // 手机验证码
            },
            // 移动端初始化
            mobile: function() {
                $('input').blur(function() { window.scrollTo(0, 0) });  // 解决 H5 在输入弹框后页面留白问题
            }
        },
        // -----------------表单验证----------------
        verify: {
            reg: {
                phone: /^1[3456789]\d{9}$/,
                email: /^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/,           // 邮箱
                userName: /^[a-z0-9_-]{3,16}$/,                     // 用户名
                chineseName: /^[\u4E00-\u9FA5]{2,4}$/,              // 中文姓名
            },
            // 手机号
            phone: function (val) {
                if (!val) {
                    return '请填写手机号！';
                } else if (!val.match(this.reg.phone)) {
                    return '请输入正确的手机号！';
                } else {
                    return false;
                }
            },
            // 验证码
            code: function (val) {
                if (!val) {
                    return '请填写验证码！';
                } else if (val.length !== 6) {
                    return '验证码错误！'
                } else {
                    return false;
                }
            }
        },
        // ----------------- 工具类 ----------------
        utils: {
            // 截取url参数
            getQueryString: function(name) {
                var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
                var r = window.location.search.substr(1).match(reg);
                if(r!=null)return  unescape(r[2]); return null;
            },
            // 获取十六进制随机色
            getRandomColor: function() {
                return '#' + (function(h) {
                    return new Array(7 - h.length).join("0") + h;
                })((Math.random() * 0x1000000 << 0).toString(16));
            },
            // 单数变双数
            getTwo: function(val) {
                n = n.toString();
                return n[1] ? n : "0" + n;
            },
            // 是否是移动端
            isMobile: function() {
                return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)
            },
            cookie: {
                get: function(cname) {
                    var name = cname + '=';
                    var ca = document.cookie.split(';');
                    for(var i=0; i<ca.length; i++) {
                        var c = ca[i];
                        while (c.charAt(0)==' ') c = c.substring(1);
                        if (c.indexOf(name) != -1) return c.substring(name.length, c.length);
                    }
                    return '';
                },
                set: function(cname, cvalue, exdays, domain) {
                    var d = new Date();
                    d.setTime(d.getTime() + (exdays*24*60*60*1000));
                    var expires = 'expires='+d.toUTCString();
                    document.cookie = cname + '=' + cvalue + '; ' + expires + '; domain=' + domain + '; path=/';
                },
                del: function(name, domain) {
                    this.set(name, '', -1, domain);
                }
            },
        },
        // -----------------ajax请求----------------
        client: {
            ajax: function (type, url, data, fun) {
                $.ajax({
                    type: type,
                    url: url,
                    data: data,
                    headers: {
                        "Authorization": jn.info.token,
                        "APP": jn.info.app,
                        "ACTIVITY": jn.info.activity,
                        "VERSIONCODE": jn.info.version,
                        "CYSCID": jn.utils.getQueryString('CYSCID')
                    },
                    success: function(res) {
                        if(res.code === 10000) {
                            fun({
                                code: 10000,
                                data: res.data
                            })
                        }else {
                            fun({
                                code: res.code,
                                data: res.data,
                                msg: res.message
                            })
                        }
                    }
                })
            },
            api: {
                base: location.origin,       // 默认地址（现在是取同域名）
                get: function (url, data, fun) {
                    jn.client.ajax('GET', this.base + '/' + jn.info.plat + url, data, fun);
                },
                post: function (url, data, fun) {
                    jn.client.ajax('POST', this.base + '/' + jn.info.plat +  url, data, fun);
                }
            },
            apiWx: {
                base: location.origin + '/wechat',
                get: function (url, data, fun) {
                    jn.client.ajax('GET', this.base + url, data, fun);
                },
                post: function (url, data, fun) {
                    jn.client.ajax('POST', this.base +  url, data, fun);
                }
            }
        },
        // -----------------公用业务----------------
        items: {
            url: {
                initPath: "/landing/init",      // 初始化地址
                userInfoPath: "/user/info",      // 用户详情
                phoneCode: '/core/zhpt/sendcode'    // 登陆发送手机号验证码
            },
            getUrl: function() {
                return  '/core/login/' + jn.info.app + '/' + jn.info.activity + '/' + jn.info.version
            },
            // 初始化（用来 赋值全局变量和获取token） -- ！必调用项
            init: function(plat, app, activity, version, fun, isWxInit) {
                jn.info.plat = plat;
                jn.info.app = app;
                jn.info.activity = activity;
                jn.info.version = version;
                jn.client.api.get(this.url.initPath, {}, function (res) {
                    if(res.code === 10000) {
                        jn.info.token = res.data.token;
                        jn.info.cyscid = jn.utils.getQueryString('CYSCID');
                        jn.info.isInit = 1;
                        jn.info.landing = res.data;
                        if(isWxInit) jn.wx.init();
                        fun()
                    }else {
                        jn.info.isInit = 2;
                        alert(res.msg);
                    }
                })
            },
            // 获取用户信息
            getUserInfo: function(fun) {
                jn.client.api.get(this.url.userInfoPath, {}, function(res) {
                    fun(res);
                    if(res.code === 10000) {
                        jn.info.userInfo = res.data;
                    }
                })
            },
            // 获取验证码
            getCode: function(phone, fun) {
                jn.client.api.post(this.url.phoneCode, {
                    phone: phone
                }, fun);
            },
            // 手机号与验证码验证
            phoneLogin: function(phone, code, fun) {
                jn.client.api.post('/core/login/' + jn.info.app + '/' + jn.info.activity + '/' + jn.info.version + '/phonelogin', {
                    phone: phone,
                    code: code
                }, fun);
            },
            // 登出
            logout: function (fun) {
                jn.client.api.post('/core/login/' + jn.info.app + '/' + jn.info.activity + '/' + jn.info.version + '/logout', {}, fun);
            },
            // 登陆
            loginXJZJ: function(back) {
                jn.utils.cookie.del("CASGTC", '.changyou.com');
                return location.origin + "/" + jn.info.plat + this.getUrl() + "?callback=" + encodeURI(back);
            }
        },
        // -----------------微信业务----------------
        wx: {
            // 微信初始化
            init: function() {
                $.ajax({
                    url: location.origin + "/wechat/web/" + jn.info.landing.activity.wxId + "/config",
                    success: function(data) {
                        if(data.config) {
                            $.getScript("https://res.wx.qq.com/open/js/jweixin-1.4.0.js", function () {
                                wx.config({
                                    debug: false ,                      // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
                                    appId: data.config.appId,           // 必填，公众号的唯一标识
                                    timestamp: data.config.timestamp,   // 必填，生成签名的时间戳
                                    nonceStr: data.config.nonceStr,     // 必填，生成签名的随机串
                                    signature: data.config.signature,   // 必填，签名，见附录1
                                    jsApiList: [                        // 必填，需要使用的JS接口列表，所有JS接口列表见附录2
                                        "onMenuShareTimeline",
                                        "onMenuShareAppMessage",
                                        "onMenuShareQQ",
                                        "onMenuShareWeibo",
                                        "hideMenuItems",
                                        "hideAllNonBaseMenuItem",
                                        "onMenuShareQZone"
                                    ]
                                });
                            })
                        }else {
                            alert('微信初始化失败，' + data.msg);
                        }
                    }
                });
            },
            // 分享
            share: function(options) {
                var _options = {
                    type: "link",
                    shareList: [
                        "onMenuShareTimeline",      // 分享到朋友圈
                        "onMenuShareAppMessage",    // 分享给朋友
                        "onMenuShareQQ",            // 分享到QQ
                        "onMenuShareWeibo",         // 分享到腾讯微博
                        "onMenuShareQZone"          // 分型到QQ空间
                    ]
                };
                _options = $.extend(_options, options);
                var list = _options.shareList;
                delete _options["shareList"];
                wx.ready(function() {
                    for(var i in list) {
                        var shareType = list[i];
                        if($.isFunction(wx[shareType])) {
                            wx[shareType](_options);
                        }
                    }
                })
            }
        }
    }
})(window, document, $);